package Testdemo2;

import java.util.*;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User:周次煜
 * Date: 2024-04-27
 * Time：18:37
 */
public class Test1 {
//    public static List<List<Integer>> threeSum(int[] nums) {
//        int sz= nums.length;
//        List<List<Integer>> lists= new ArrayList<>();
//        if(sz==3) {
//            if(nums[0]+nums[1]+nums[2]==0) {
//                List<Integer> list=new ArrayList<>();
//                list.add(nums[0]);
//                list.add(nums[1]);
//                list.add(nums[2]);
//
//                lists.add(list);
//
//                return lists;
//            }  else {
//                return lists;
//            }
//        }
//
//        Arrays.sort(nums);
//        for(int i = sz-1; i >=2; i--) {
//            int left=0;
//            int right=i-1;
//            while(left < right) {
//                if(nums[left]+nums[right]+nums[i] < 0) {
//                    left++;
//                } else if(nums[left]+nums[right]+nums[i] > 0) {
//                    right--;
//                } else {
//                    List<Integer> list=new ArrayList<>();
//                    list.add(nums[left]);
//                    list.add(nums[right]);
//                    list.add(nums[i]);
//
//                    if(!lists.contains(list))
//                        lists.add(list);
//
//
//                    if(left+1==right) break;
//
//                    if(nums[left]==nums[left+1]) {
//                        left++;
//                    } else if(nums[right]==nums[right-1]) {
//                        right--;
//                    } else  {
//                        left++;
//                    }
//
//
//                }
//            }
//        }
//        return lists;
//    }



        public static List<List<Integer>> threeSum(int[] nums) {
            int sz= nums.length;
            List<List<Integer>> lists= new ArrayList<>();
            if(sz==3) {
                if(nums[0]+nums[1]+nums[2]==0) {
                    List<Integer> list=new ArrayList<>();
                    list.add(nums[0]);
                    list.add(nums[1]);
                    list.add(nums[2]);

                    lists.add(list);

                    return lists;
                }  else {
                    return lists;
                }
            }

            Arrays.sort(nums);

            for(int i = 0; i <= sz-3; i++) {

                if(nums[i] > 0) {
                    break;
                }
                int left=i+1;
                int right=sz-1;
                while(left < right) {
                    if(nums[left]+nums[right]+nums[i] < 0) {
                        left++;
                    } else if(nums[left]+nums[right]+nums[i] > 0) {
                        right--;
                    } else {
                        List<Integer> list=new ArrayList<>();
                        list.add(nums[left]);
                        list.add(nums[right]);
                        list.add(nums[i]);
                        lists.add(list);
                        int m1=nums[left];

                        while(left < right &&  nums[left] == m1 ) {
                            left++;
                        }



                        int m2=nums[right];
                        while(left < right && nums[right] == m2 ) {
                            right--;
                        }
                    }


                }

                int m =  nums[i];
                while(i <= sz-3  && nums[i+1] == m ) {
                    i++;
                }
            }
            return lists;
        }

    public static void main(String[] args) {
        int[]array={-4,-4,-1,0,0,0,1,1,4,4};
        int[]array1={-1,0,1,2,-1,-4};
        System.out.println(threeSum(array1));

        // 数组转化为顺序表
        List<Integer> l= Arrays.asList(10,19,29,39);
        List<Integer> l2= new ArrayList<>(Arrays.asList(10,19,29,39));
        System.out.println(l);
        System.out.println(l2);
    }
}


//class  Test2 {
//    public static int minSubArrayLen(int target, int[] nums) {
//        Arrays.sort(nums);
//        int i=nums.length-1;
//        int sum=0,count=0;
//        for(;i >= 0;i--) {
//            sum += nums[i];
//            count++;
//            if(sum >= target) {
//                return count;
//            }
//
//        }
//
//        return 0;
//    }
//
//    public static void main(String[] args) {
//        int []array={12,28,83,4,25,26,25,2,25,25,25,12};
//        System.out.println(minSubArrayLen(213, array));
//
//    }
//}



class  Test3 {


    public static int minSubArrayLen(int target, int[] nums) {


        int sz=nums.length;

        int mix=nums[0],count=0;
        int mid=0;
        for(int i=1;i<sz;i++) {
            if(mix <= nums[i]) {
                mix=nums[i];
                mid=i;
            }
        }

        int left=mid-1,right=mid+1;
        int sum=mix;

        // 先得到未出界的值
        while(left >= 0 && right <sz) {
            if(nums[left] > nums[right]) {
                sum += nums[left];
                left--;
            }  else {
                sum += nums[right];
                right++;
            }


            if(sum >= target) {

                break;
            }
        }

        while( sum < target && left >= 0 ) {
            sum += nums[left];
            left--;
        }

        left++;

        while( sum < target &&  right < sz ) {
            sum += nums[right];
            right ++;
        }

        right--;

        while(sum >= target ) {
            if(nums[left] < nums[right]) {
                sum -= nums[left];


                if(sum < target ) {
                    sum += nums[left];

                    break;
                }

                left++;
            } else {
                sum -= nums[right];

                if(sum < target) {
                    sum += nums[right];
                    break;
                }
                right--;
            }
        }

        if(sum >= target) {
            return right-left+1;
        }
        return 0;
    }

    public static void main(String[] args) {
        int []array={12,28,83,4,25,26,25,2,25,25,25,12};
        System.out.println(minSubArrayLen(213, array));

    }
}